#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
数据预处理MCP服务启动脚本

使用方法：
1. 直接运行: python start_server.py
2. 指定端口: python start_server.py --port 8080
3. 调试模式: python start_server.py --debug
"""

import argparse
import asyncio
import logging
import sys
from pathlib import Path

# 添加当前目录到Python路径
sys.path.insert(0, str(Path(__file__).parent))

from server import main

def setup_logging(debug: bool = False):
    """设置日志配置"""
    level = logging.DEBUG if debug else logging.INFO
    
    logging.basicConfig(
        level=level,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        handlers=[
            logging.FileHandler('data_preprocessing.log', encoding='utf-8'),
            logging.StreamHandler(sys.stdout)
        ]
    )
    
    # 设置第三方库的日志级别
    logging.getLogger('pandas').setLevel(logging.WARNING)
    logging.getLogger('numpy').setLevel(logging.WARNING)
    logging.getLogger('openpyxl').setLevel(logging.WARNING)

def parse_arguments():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(
        description='数据预处理MCP服务',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例用法:
  python start_server.py                    # 启动服务
  python start_server.py --debug            # 调试模式启动
  python start_server.py --log-file custom.log  # 自定义日志文件
        """
    )
    
    parser.add_argument(
        '--debug',
        action='store_true',
        help='启用调试模式（详细日志输出）'
    )
    
    parser.add_argument(
        '--log-file',
        type=str,
        default='data_preprocessing.log',
        help='日志文件路径（默认：data_preprocessing.log）'
    )
    
    parser.add_argument(
        '--version',
        action='version',
        version='数据预处理MCP服务 v1.0.0'
    )
    
    return parser.parse_args()

def check_dependencies():
    """检查必要的依赖包"""
    required_packages = [
        'mcp',
        'numpy',
        'pandas',
        'openpyxl',
        'scipy'
    ]
    
    missing_packages = []
    
    for package in required_packages:
        try:
            __import__(package)
        except ImportError:
            missing_packages.append(package)
    
    if missing_packages:
        print(f"错误：缺少必要的依赖包: {', '.join(missing_packages)}")
        print("请运行以下命令安装依赖：")
        print(f"pip install {' '.join(missing_packages)}")
        print("或者：")
        print("pip install -r requirements.txt")
        sys.exit(1)

def print_startup_info():
    """打印启动信息"""
    print("="*60)
    print("数据预处理MCP服务")
    print("="*60)
    print("功能：")
    print("  • 文件数据处理（CSV、Excel、文本）")
    print("  • 直接数据处理（JSON、列表、矩阵）")
    print("  • 数据格式验证")
    print("  • 排序数据转换")
    print("  • 数据信息分析")
    print()
    print("支持的输出格式：")
    print("  • groups: 多组独立样本数据")
    print("  • matrix: 重复测量数据矩阵")
    print("  • binary_matrix: 二分类数据矩阵")
    print()
    print("兼容的MCP服务：")
    print("  • Accurate_sample_approximation_test")
    print("  • Accurate_samples_exact_test")
    print("="*60)
    print("服务正在启动...")
    print()

async def run_server(args):
    """运行服务器"""
    try:
        # 设置日志
        setup_logging(args.debug)
        
        # 检查依赖
        check_dependencies()
        
        # 打印启动信息
        print_startup_info()
        
        # 启动服务
        await main()
        
    except KeyboardInterrupt:
        print("\n服务已停止")
    except Exception as e:
        print(f"服务启动失败: {e}")
        if args.debug:
            import traceback
            traceback.print_exc()
        sys.exit(1)

if __name__ == "__main__":
    # 解析命令行参数
    args = parse_arguments()
    
    # 运行服务
    asyncio.run(run_server(args))